本文介绍如何使用Hive在EMR集群中创建OSS表。
背景信息
使用Hive创建OSS库、表以及访问OSS数据
参照如下示例,使用Hive创建OSS数据库以及访问OSS。
CREATE DATABASE test_db location "oss://test_bucket/test_db"; //在OSS指定Bucket路径上创建名为test_db的数据库。test_bucket为示例路径,实际使用时替换成真实的路径。
USE test_db;
CREATE TABLE test_table (id INT, name STRING, age INT);
INSERT INTO test_table values(1,"ab",12);
SELECT * FROM test_table;
CREATE TABLE test_table_1 (id INT, name STRING, age INT) location "oss://test_bucket/test_db/test_table_1"; //在指定的Location上创建名为test_table_1的数据表。test_bucket为示例路径,实际使用时替换成真实的路径。
INSERT INTO test_table_1 values(1,"cd",14);
SELECT * FROM test_table_1;
DROP TABLE test_table_1;
DROP DATABASE test_db;
Hive创建表时指定AccessKey
当前各引擎已不支持在建表语句中指定AccessKey。如果指定AccessKey,引擎执行时将会报错。您可以去掉OSS Location中的AccessKey,参见使用Hive创建OSS库、表以及访问OSS数据中的方式创建表。
hive> CREATE TABLE test_table (id INT, name STRING, age INT) location "oss://[accessKeyId]:[accessKeySecret]@test_bucket.oss-cn-hangzhou-internal.aliyuncs.com/test_db/test_table";
FAILED: SemanticException java.lang.IllegalArgumentException: The Filesystem URI contains login details. This authentication mechanism is no longer supported
集群显示指定访问OSS的AccessKey
更改免密配置
EMR集群访问OSS是免密配置的。控制免密访问的配置项是Hadoop-Common组件core-site.xml中fs.oss.credentials.provider配置项。如果您想要去掉免密,使用AccessKey访问,需要把这个参数去掉,同时在core-site.xml中添加如下参数。
<property> <name>fs.oss.accessKeyId</name> <value>LTAI5tM85Z4scN****</value> </property> <property> <name>fs.oss.accessKeySecret</name> <value>HF7P1L8PS6Eqfa****</value> </property>
在控制台执行如下命令,验证是否生效。
//去掉fs.oss.credentials.provider配置后,通过ls命令,发现无法访问OSS。 hadoop fs -ls oss://test_bucket/test_db ls: ERROR: without login secrets configured. //加上AccessKey配置之后,可以看到能够查看OSS文件目录。 hadoop fs -ls oss://test_bucket/test_db drwxrwxrwx - root root 0 2022-11-30 12:51 oss://test_bucket/test_db/student
重启HiveServer2以及HiveMetaStore相关服务。
文档内容是否对您有帮助?